home *** CD-ROM | disk | FTP | other *** search
/ Scene Storm / Scene Storm - Volume 1.iso / coding / asm / demos / retinarave / include / pt-play2.s < prev    next >
Text File  |  1980-01-03  |  23KB  |  1,156 lines

  1. ;;
  2. ;********************************************
  3. ;* ----- Protracker V1.1B Playroutine ----- *
  4. ;* Lars "Zap" Hamre/Amiga Freelancers 1991  *
  5. ;* Bekkeliveien 10, N-2010 STRØMMEN, Norway *
  6.  
  7. ; VBlank Version 2:
  8. ; Call mt_init to initialize the routine, then call mt_music on
  9. ; each vertical blank (50 Hz). To end the song and turn off all
  10. ; voices, call mt_end.
  11.  
  12. ; This playroutine is not very fast, optimized or well commented,
  13. ; but all the new commands in PT1.1A should work.
  14. ; If it's not good enough, you'll have to change it yourself.
  15. ; We'll try to write a faster routine soon...
  16.  
  17. ; Changes from V1.0C playroutine:
  18. ; - Vibrato depth changed to be compatible with Noisetracker 2.0.
  19. ;   You'll have to double all vib. depths on old PT modules.
  20. ; - Funk Repeat changed to Invert Loop.
  21. ; - Period set back earlier when stopping an effect.
  22.  
  23. DMAWait = 300 ; Set this as low as possible without losing low notes.
  24.  
  25. n_note        EQU    0  ; W
  26. n_cmd        EQU    2  ; W
  27. n_cmdlo        EQU    3  ; B
  28. n_start        EQU    4  ; L
  29. n_length    EQU    8  ; W
  30. n_loopstart    EQU    10 ; L
  31. n_replen    EQU    14 ; W
  32. n_period    EQU    16 ; W
  33. n_finetune    EQU    18 ; B
  34. n_volume    EQU    19 ; B
  35. n_dmabit    EQU    20 ; W
  36. n_toneportdirec    EQU    22 ; B
  37. n_toneportspeed    EQU    23 ; B
  38. n_wantedperiod    EQU    24 ; W
  39. n_vibratocmd    EQU    26 ; B
  40. n_vibratopos    EQU    27 ; B
  41. n_tremolocmd    EQU    28 ; B
  42. n_tremolopos    EQU    29 ; B
  43. n_wavecontrol    EQU    30 ; B
  44. n_glissfunk    EQU    31 ; B
  45. n_sampleoffset    EQU    32 ; B
  46. n_pattpos    EQU    33 ; B
  47. n_loopcount    EQU    34 ; B
  48. n_funkoffset    EQU    35 ; B
  49. n_wavestart    EQU    36 ; L
  50. n_reallength    EQU    40 ; W
  51.  
  52. mt_init    Lea    Mt_data,A0
  53.     MOVE.L    A0,mt_SongDataPtr
  54.     MOVE.L    A0,A1
  55.     LEA    952(A1),A1
  56.     MOVEQ    #127,D0
  57.     MOVEQ    #0,D1
  58. mtloop    MOVE.L    D1,D2
  59.     SUBQ.W    #1,D0
  60. mtloop2    MOVE.B    (A1)+,D1
  61.     CMP.B    D2,D1
  62.     BGT.S    mtloop
  63.     DBRA    D0,mtloop2
  64.     ADDQ.B    #1,D2
  65.             
  66.     LEA    mt_SampleStarts(PC),A1
  67.     ASL.L    #8,D2
  68.     ASL.L    #2,D2
  69.     ADD.L    #1084,D2
  70.     ADD.L    A0,D2
  71.     MOVE.L    D2,A2
  72.     MOVEQ    #30,D0
  73. mtloop3    CLR.L    (A2)
  74.     MOVE.L    A2,(A1)+
  75.     MOVEQ    #0,D1
  76.     MOVE.W    42(A0),D1
  77.     ASL.L    #1,D1
  78.     ADD.L    D1,A2
  79.     ADD.L    #30,A0
  80.     DBRA    D0,mtloop3
  81.  
  82.     OR.B    #2,$BFE001
  83.     MOVE.B    #6,mt_speed
  84.     CLR.B    mt_counter
  85.     CLR.B    mt_SongPos
  86.     CLR.W    mt_PatternPos
  87. mt_end    CLR.W    $DFF0A8
  88.     CLR.W    $DFF0B8
  89.     CLR.W    $DFF0C8
  90.     CLR.W    $DFF0D8
  91.     MOVE.W    #$F,$DFF096
  92.     RTS
  93.  
  94. mt_music
  95.     MOVEM.L    D0-D4/A0-A6,-(SP)
  96.  
  97.     moveq.w #0,Equalizer1
  98.     moveq.w #0,Equalizer2
  99.     moveq.w #0,Equalizer3
  100.     moveq.w #0,Equalizer4
  101.  
  102.  
  103.     ADDQ.B    #1,mt_counter
  104.     MOVE.B    mt_counter(PC),D0
  105.     CMP.B    mt_speed(PC),D0
  106.     BLO.S    mt_NoNewNote
  107.     CLR.B    mt_counter
  108.     TST.B    mt_PattDelTime2
  109.     BEQ.S    mt_GetNewNote
  110.     BSR.S    mt_NoNewAllChannels
  111.     BRA    mt_dskip
  112.  
  113. mt_NoNewNote
  114.     BSR.S    mt_NoNewAllChannels
  115.     BRA    mt_NoNewPosYet
  116.  
  117. mt_NoNewAllChannels
  118.     LEA    $DFF0A0,A5
  119.     LEA    mt_chan1temp(PC),A6
  120.     BSR    mt_CheckEfx
  121.     LEA    $DFF0B0,A5
  122.     LEA    mt_chan2temp(PC),A6
  123.     BSR    mt_CheckEfx
  124.     LEA    $DFF0C0,A5
  125.     LEA    mt_chan3temp(PC),A6
  126.     BSR    mt_CheckEfx
  127.     LEA    $DFF0D0,A5
  128.     LEA    mt_chan4temp(PC),A6
  129.     BRA    mt_CheckEfx
  130.  
  131. mt_GetNewNote
  132.     MOVE.L    mt_SongDataPtr(PC),A0
  133.     LEA    12(A0),A3
  134.     LEA    952(A0),A2    ;pattpo
  135.     LEA    1084(A0),A0    ;patterndata
  136.     MOVEQ    #0,D0
  137.     MOVEQ    #0,D1
  138.     MOVE.B    mt_SongPos(PC),D0
  139.     MOVE.B    (A2,D0.W),D1
  140.     ASL.L    #8,D1
  141.     ASL.L    #2,D1
  142.     ADD.W    mt_PatternPos(PC),D1
  143.     CLR.W    mt_DMACONtemp
  144.  
  145.     LEA    $DFF0A0,A5
  146.     LEA    mt_chan1temp(PC),A6
  147.     BSR.S    mt_PlayVoice
  148.     LEA    $DFF0B0,A5
  149.     LEA    mt_chan2temp(PC),A6
  150.     BSR.S    mt_PlayVoice
  151.     LEA    $DFF0C0,A5
  152.     LEA    mt_chan3temp(PC),A6
  153.     BSR.S    mt_PlayVoice
  154.     LEA    $DFF0D0,A5
  155.     LEA    mt_chan4temp(PC),A6
  156.     BSR.S    mt_PlayVoice
  157.     BRA    mt_SetDMA
  158.  
  159. mt_PlayVoice
  160.     TST.L    (A6)
  161.     BNE.S    mt_plvskip
  162.     BSR    mt_PerNop
  163. mt_plvskip
  164.     MOVE.L    (A0,D1.L),(A6)
  165.     ADDQ.L    #4,D1
  166.     MOVEQ    #0,D2
  167.     MOVE.B    n_cmd(A6),D2
  168.     AND.B    #$F0,D2
  169.     LSR.B    #4,D2
  170.     MOVE.B    (A6),D0
  171.     AND.B    #$F0,D0
  172.     OR.B    D0,D2
  173.     TST.B    D2
  174.     BEQ    mt_SetRegs
  175.     MOVEQ    #0,D3
  176.     LEA    mt_SampleStarts(PC),A1
  177.     MOVE    D2,D4
  178.     SUBQ.L    #1,D2
  179.     ASL.L    #2,D2
  180.  
  181.     cmp.l #$dff0a0,a5
  182.     bne NoEqu1
  183.     move.w #$ffff,Equalizer1
  184. NoEqu1:
  185.     cmp.l #$dff0b0,a5
  186.     bne NoEqu2
  187.     move.w #$ffff,Equalizer2
  188. NoEqu2:
  189.     cmp.l #$dff0c0,a5
  190.     bne NoEqu3
  191.     move.w #$ffff,Equalizer3
  192. NoEqu3:
  193.     cmp.l #$dff0d0,a5
  194.     bne NoEqu4
  195.     move.w #$ffff,Equalizer4
  196. NoEqu4:
  197.  
  198.  
  199.     MULU    #30,D4
  200.     MOVE.L    (A1,D2.L),n_start(A6)
  201.     MOVE.W    (A3,D4.L),n_length(A6)
  202.     MOVE.W    (A3,D4.L),n_reallength(A6)
  203.     MOVE.B    2(A3,D4.L),n_finetune(A6)
  204.     MOVE.B    3(A3,D4.L),n_volume(A6)
  205.     MOVE.W    4(A3,D4.L),D3 ; Get repeat
  206.     TST.W    D3
  207.     BEQ.S    mt_NoLoop
  208.     MOVE.L    n_start(A6),D2    ; Get start
  209.     ASL.W    #1,D3
  210.     ADD.L    D3,D2        ; Add repeat
  211.     MOVE.L    D2,n_loopstart(A6)
  212.     MOVE.L    D2,n_wavestart(A6)
  213.     MOVE.W    4(A3,D4.L),D0    ; Get repeat
  214.     ADD.W    6(A3,D4.L),D0    ; Add replen
  215.     MOVE.W    D0,n_length(A6)
  216.     MOVE.W    6(A3,D4.L),n_replen(A6)    ; Save replen
  217.     MOVEQ    #0,D0
  218.     MOVE.B    n_volume(A6),D0
  219.     MOVE.W    D0,8(A5)    ; Set volume
  220.     BRA.S    mt_SetRegs
  221.  
  222. mt_NoLoop
  223.     MOVE.L    n_start(A6),D2
  224.     ADD.L    D3,D2
  225.     MOVE.L    D2,n_loopstart(A6)
  226.     MOVE.L    D2,n_wavestart(A6)
  227.     MOVE.W    6(A3,D4.L),n_replen(A6)    ; Save replen
  228.     MOVEQ    #0,D0
  229.     MOVE.B    n_volume(A6),D0
  230.     MOVE.W    D0,8(A5)    ; Set volume
  231. mt_SetRegs
  232.     MOVE.W    (A6),D0
  233.     AND.W    #$0FFF,D0
  234.     BEQ    mt_CheckMoreEfx    ; If no note
  235.     MOVE.W    2(A6),D0
  236.     AND.W    #$0FF0,D0
  237.     CMP.W    #$0E50,D0
  238.     BEQ.S    mt_DoSetFineTune
  239.     MOVE.B    2(A6),D0
  240.     AND.B    #$0F,D0
  241.     CMP.B    #3,D0    ; TonePortamento
  242.     BEQ.S    mt_ChkTonePorta
  243.     CMP.B    #5,D0
  244.     BEQ.S    mt_ChkTonePorta
  245.     CMP.B    #9,D0    ; Sample Offset
  246.     BNE.S    mt_SetPeriod
  247.     BSR    mt_CheckMoreEfx
  248.     BRA.S    mt_SetPeriod
  249.  
  250. mt_DoSetFineTune
  251.     BSR    mt_SetFineTune
  252.     BRA.S    mt_SetPeriod
  253.  
  254. mt_ChkTonePorta
  255.     BSR    mt_SetTonePorta
  256.     BRA    mt_CheckMoreEfx
  257.  
  258. mt_SetPeriod
  259.     MOVEM.L    D0-D1/A0-A1,-(SP)
  260.     MOVE.W    (A6),D1
  261.     AND.W    #$0FFF,D1
  262.     LEA    mt_PeriodTable(PC),A1
  263.     MOVEQ    #0,D0
  264.     MOVEQ    #36,D7
  265. mt_ftuloop
  266.     CMP.W    (A1,D0.W),D1
  267.     BHS.S    mt_ftufound
  268.     ADDQ.L    #2,D0
  269.     DBRA    D7,mt_ftuloop
  270. mt_ftufound
  271.     MOVEQ    #0,D1
  272.     MOVE.B    n_finetune(A6),D1
  273.     MULU    #36*2,D1
  274.     ADD.L    D1,A1
  275.     MOVE.W    (A1,D0.W),n_period(A6)
  276.     MOVEM.L    (SP)+,D0-D1/A0-A1
  277.  
  278.     MOVE.W    2(A6),D0
  279.     AND.W    #$0FF0,D0
  280.     CMP.W    #$0ED0,D0 ; Notedelay
  281.     BEQ    mt_CheckMoreEfx
  282.  
  283.     MOVE.W    n_dmabit(A6),$DFF096
  284.     BTST    #2,n_wavecontrol(A6)
  285.     BNE.S    mt_vibnoc
  286.     CLR.B    n_vibratopos(A6)
  287. mt_vibnoc
  288.     BTST    #6,n_wavecontrol(A6)
  289.     BNE.S    mt_trenoc
  290.     CLR.B    n_tremolopos(A6)
  291. mt_trenoc
  292.     MOVE.L    n_start(A6),(A5)    ; Set start
  293.     MOVE.W    n_length(A6),4(A5)    ; Set length
  294.     MOVE.W    n_period(A6),D0
  295.     MOVE.W    D0,6(A5)        ; Set period
  296.     MOVE.W    n_dmabit(A6),D0
  297.     OR.W    D0,mt_DMACONtemp
  298.     BRA    mt_CheckMoreEfx
  299.  
  300. mt_SetDMA
  301.     MOVE.W    #300,D0
  302. mt_WaitDMA
  303.     DBRA    D0,mt_WaitDMA
  304.     MOVE.W    mt_DMACONtemp(PC),D0
  305.     OR.W    #$8000,D0
  306.     MOVE.W    D0,$DFF096
  307.     MOVE.W    #300,D0
  308. mt_WaitDMA2
  309.     DBRA    D0,mt_WaitDMA2
  310.  
  311.     LEA    $DFF000,A5
  312.     LEA    mt_chan4temp(PC),A6
  313.     MOVE.L    n_loopstart(A6),$D0(A5)
  314.     MOVE.W    n_replen(A6),$D4(A5)
  315.     LEA    mt_chan3temp(PC),A6
  316.     MOVE.L    n_loopstart(A6),$C0(A5)
  317.     MOVE.W    n_replen(A6),$C4(A5)
  318.     LEA    mt_chan2temp(PC),A6
  319.     MOVE.L    n_loopstart(A6),$B0(A5)
  320.     MOVE.W    n_replen(A6),$B4(A5)
  321.     LEA    mt_chan1temp(PC),A6
  322.     MOVE.L    n_loopstart(A6),$A0(A5)
  323.     MOVE.W    n_replen(A6),$A4(A5)
  324.  
  325. mt_dskip
  326.     ADD.W    #16,mt_PatternPos
  327.     MOVE.B    mt_PattDelTime,D0
  328.     BEQ.S    mt_dskc
  329.     MOVE.B    D0,mt_PattDelTime2
  330.     CLR.B    mt_PattDelTime
  331. mt_dskc    TST.B    mt_PattDelTime2
  332.     BEQ.S    mt_dska
  333.     SUBQ.B    #1,mt_PattDelTime2
  334.     BEQ.S    mt_dska
  335.     SUB.W    #16,mt_PatternPos
  336. mt_dska    TST.B    mt_PBreakFlag
  337.     BEQ.S    mt_nnpysk
  338.     SF    mt_PBreakFlag
  339.     MOVEQ    #0,D0
  340.     MOVE.B    mt_PBreakPos(PC),D0
  341.     CLR.B    mt_PBreakPos
  342.     LSL.W    #4,D0
  343.     MOVE.W    D0,mt_PatternPos
  344. mt_nnpysk
  345.     CMP.W    #1024,mt_PatternPos
  346.     BLO.S    mt_NoNewPosYet
  347. mt_NextPosition    
  348.     MOVEQ    #0,D0
  349.     MOVE.B    mt_PBreakPos(PC),D0
  350.     LSL.W    #4,D0
  351.     MOVE.W    D0,mt_PatternPos
  352.     CLR.B    mt_PBreakPos
  353.     CLR.B    mt_PosJumpFlag
  354.     ADDQ.B    #1,mt_SongPos
  355.     AND.B    #$7F,mt_SongPos
  356.     MOVE.B    mt_SongPos(PC),D1
  357.     MOVE.L    mt_SongDataPtr(PC),A0
  358.     CMP.B    950(A0),D1
  359.     BLO.S    mt_NoNewPosYet
  360.     CLR.B    mt_SongPos
  361. mt_NoNewPosYet    
  362.     TST.B    mt_PosJumpFlag
  363.     BNE.S    mt_NextPosition
  364.     MOVEM.L    (SP)+,D0-D4/A0-A6
  365.     RTS
  366.  
  367. mt_CheckEfx
  368.     BSR    mt_UpdateFunk
  369.     MOVE.W    n_cmd(A6),D0
  370.     AND.W    #$0FFF,D0
  371.     BEQ.S    mt_PerNop
  372.     MOVE.B    n_cmd(A6),D0
  373.     AND.B    #$0F,D0
  374.     BEQ.S    mt_Arpeggio
  375.     CMP.B    #1,D0
  376.     BEQ    mt_PortaUp
  377.     CMP.B    #2,D0
  378.     BEQ    mt_PortaDown
  379.     CMP.B    #3,D0
  380.     BEQ    mt_TonePortamento
  381.     CMP.B    #4,D0
  382.     BEQ    mt_Vibrato
  383.     CMP.B    #5,D0
  384.     BEQ    mt_TonePlusVolSlide
  385.     CMP.B    #6,D0
  386.     BEQ    mt_VibratoPlusVolSlide
  387.     CMP.B    #$E,D0
  388.     BEQ    mt_E_Commands
  389. SetBack    MOVE.W    n_period(A6),6(A5)
  390.     CMP.B    #7,D0
  391.     BEQ    mt_Tremolo
  392.     CMP.B    #$A,D0
  393.     BEQ    mt_VolumeSlide
  394. mt_Return2
  395.     RTS
  396.  
  397. mt_PerNop
  398.     MOVE.W    n_period(A6),6(A5)
  399.     RTS
  400.  
  401. mt_Arpeggio
  402.     MOVEQ    #0,D0
  403.     MOVE.B    mt_counter(PC),D0
  404.     DIVS    #3,D0
  405.     SWAP    D0
  406.     CMP.W    #0,D0
  407.     BEQ.S    mt_Arpeggio2
  408.     CMP.W    #2,D0
  409.     BEQ.S    mt_Arpeggio1
  410.     MOVEQ    #0,D0
  411.     MOVE.B    n_cmdlo(A6),D0
  412.     LSR.B    #4,D0
  413.     BRA.S    mt_Arpeggio3
  414.  
  415. mt_Arpeggio1
  416.     MOVEQ    #0,D0
  417.     MOVE.B    n_cmdlo(A6),D0
  418.     AND.B    #15,D0
  419.     BRA.S    mt_Arpeggio3
  420.  
  421. mt_Arpeggio2
  422.     MOVE.W    n_period(A6),D2
  423.     BRA.S    mt_Arpeggio4
  424.  
  425. mt_Arpeggio3
  426.     ASL.W    #1,D0
  427.     MOVEQ    #0,D1
  428.     MOVE.B    n_finetune(A6),D1
  429.     MULU    #36*2,D1
  430.     LEA    mt_PeriodTable(PC),A0
  431.     ADD.L    D1,A0
  432.     MOVEQ    #0,D1
  433.     MOVE.W    n_period(A6),D1
  434.     MOVEQ    #36,D7
  435. mt_arploop
  436.     MOVE.W    (A0,D0.W),D2
  437.     CMP.W    (A0),D1
  438.     BHS.S    mt_Arpeggio4
  439.     ADDQ.L    #2,A0
  440.     DBRA    D7,mt_arploop
  441.     RTS
  442.  
  443. mt_Arpeggio4
  444.     MOVE.W    D2,6(A5)
  445.     RTS
  446.  
  447. mt_FinePortaUp
  448.     TST.B    mt_counter
  449.     BNE.S    mt_Return2
  450.     MOVE.B    #$0F,mt_LowMask
  451. mt_PortaUp
  452.     MOVEQ    #0,D0
  453.     MOVE.B    n_cmdlo(A6),D0
  454.     AND.B    mt_LowMask(PC),D0
  455.     MOVE.B    #$FF,mt_LowMask
  456.     SUB.W    D0,n_period(A6)
  457.     MOVE.W    n_period(A6),D0
  458.     AND.W    #$0FFF,D0
  459.     CMP.W    #113,D0
  460.     BPL.S    mt_PortaUskip
  461.     AND.W    #$F000,n_period(A6)
  462.     OR.W    #113,n_period(A6)
  463. mt_PortaUskip
  464.     MOVE.W    n_period(A6),D0
  465.     AND.W    #$0FFF,D0
  466.     MOVE.W    D0,6(A5)
  467.     RTS    
  468.  
  469. mt_FinePortaDown
  470.     TST.B    mt_counter
  471.     BNE    mt_Return2
  472.     MOVE.B    #$0F,mt_LowMask
  473. mt_PortaDown
  474.     CLR.W    D0
  475.     MOVE.B    n_cmdlo(A6),D0
  476.     AND.B    mt_LowMask(PC),D0
  477.     MOVE.B    #$FF,mt_LowMask
  478.     ADD.W    D0,n_period(A6)
  479.     MOVE.W    n_period(A6),D0
  480.     AND.W    #$0FFF,D0
  481.     CMP.W    #856,D0
  482.     BMI.S    mt_PortaDskip
  483.     AND.W    #$F000,n_period(A6)
  484.     OR.W    #856,n_period(A6)
  485. mt_PortaDskip
  486.     MOVE.W    n_period(A6),D0
  487.     AND.W    #$0FFF,D0
  488.     MOVE.W    D0,6(A5)
  489.     RTS
  490.  
  491. mt_SetTonePorta
  492.     MOVE.L    A0,-(SP)
  493.     MOVE.W    (A6),D2
  494.     AND.W    #$0FFF,D2
  495.     MOVEQ    #0,D0
  496.     MOVE.B    n_finetune(A6),D0
  497.     MULU    #37*2,D0
  498.     LEA    mt_PeriodTable(PC),A0
  499.     ADD.L    D0,A0
  500.     MOVEQ    #0,D0
  501. mt_StpLoop
  502.     CMP.W    (A0,D0.W),D2
  503.     BHS.S    mt_StpFound
  504.     ADDQ.W    #2,D0
  505.     CMP.W    #37*2,D0
  506.     BLO.S    mt_StpLoop
  507.     MOVEQ    #35*2,D0
  508. mt_StpFound
  509.     MOVE.B    n_finetune(A6),D2
  510.     AND.B    #8,D2
  511.     BEQ.S    mt_StpGoss
  512.     TST.W    D0
  513.     BEQ.S    mt_StpGoss
  514.     SUBQ.W    #2,D0
  515. mt_StpGoss
  516.     MOVE.W    (A0,D0.W),D2
  517.     MOVE.L    (SP)+,A0
  518.     MOVE.W    D2,n_wantedperiod(A6)
  519.     MOVE.W    n_period(A6),D0
  520.     CLR.B    n_toneportdirec(A6)
  521.     CMP.W    D0,D2
  522.     BEQ.S    mt_ClearTonePorta
  523.     BGE    mt_Return2
  524.     MOVE.B    #1,n_toneportdirec(A6)
  525.     RTS
  526.  
  527. mt_ClearTonePorta
  528.     CLR.W    n_wantedperiod(A6)
  529.     RTS
  530.  
  531. mt_TonePortamento
  532.     MOVE.B    n_cmdlo(A6),D0
  533.     BEQ.S    mt_TonePortNoChange
  534.     MOVE.B    D0,n_toneportspeed(A6)
  535.     CLR.B    n_cmdlo(A6)
  536. mt_TonePortNoChange
  537.     TST.W    n_wantedperiod(A6)
  538.     BEQ    mt_Return2
  539.     MOVEQ    #0,D0
  540.     MOVE.B    n_toneportspeed(A6),D0
  541.     TST.B    n_toneportdirec(A6)
  542.     BNE.S    mt_TonePortaUp
  543. mt_TonePortaDown
  544.     ADD.W    D0,n_period(A6)
  545.     MOVE.W    n_wantedperiod(A6),D0
  546.     CMP.W    n_period(A6),D0
  547.     BGT.S    mt_TonePortaSetPer
  548.     MOVE.W    n_wantedperiod(A6),n_period(A6)
  549.     CLR.W    n_wantedperiod(A6)
  550.     BRA.S    mt_TonePortaSetPer
  551.  
  552. mt_TonePortaUp
  553.     SUB.W    D0,n_period(A6)
  554.     MOVE.W    n_wantedperiod(A6),D0
  555.     CMP.W    n_period(A6),D0
  556.     BLT.S    mt_TonePortaSetPer
  557.     MOVE.W    n_wantedperiod(A6),n_period(A6)
  558.     CLR.W    n_wantedperiod(A6)
  559.  
  560. mt_TonePortaSetPer
  561.     MOVE.W    n_period(A6),D2
  562.     MOVE.B    n_glissfunk(A6),D0
  563.     AND.B    #$0F,D0
  564.     BEQ.S    mt_GlissSkip
  565.     MOVEQ    #0,D0
  566.     MOVE.B    n_finetune(A6),D0
  567.     MULU    #36*2,D0
  568.     LEA    mt_PeriodTable(PC),A0
  569.     ADD.L    D0,A0
  570.     MOVEQ    #0,D0
  571. mt_GlissLoop
  572.     CMP.W    (A0,D0.W),D2
  573.     BHS.S    mt_GlissFound
  574.     ADDQ.W    #2,D0
  575.     CMP.W    #36*2,D0
  576.     BLO.S    mt_GlissLoop
  577.     MOVEQ    #35*2,D0
  578. mt_GlissFound
  579.     MOVE.W    (A0,D0.W),D2
  580. mt_GlissSkip
  581.     MOVE.W    D2,6(A5) ; Set period
  582.     RTS
  583.  
  584. mt_Vibrato
  585.     MOVE.B    n_cmdlo(A6),D0
  586.     BEQ.S    mt_Vibrato2
  587.     MOVE.B    n_vibratocmd(A6),D2
  588.     AND.B    #$0F,D0
  589.     BEQ.S    mt_vibskip
  590.     AND.B    #$F0,D2
  591.     OR.B    D0,D2
  592. mt_vibskip
  593.     MOVE.B    n_cmdlo(A6),D0
  594.     AND.B    #$F0,D0
  595.     BEQ.S    mt_vibskip2
  596.     AND.B    #$0F,D2
  597.     OR.B    D0,D2
  598. mt_vibskip2
  599.     MOVE.B    D2,n_vibratocmd(A6)
  600. mt_Vibrato2
  601.     MOVE.B    n_vibratopos(A6),D0
  602.     LEA    mt_VibratoTable(PC),A4
  603.     LSR.W    #2,D0
  604.     AND.W    #$001F,D0
  605.     MOVEQ    #0,D2
  606.     MOVE.B    n_wavecontrol(A6),D2
  607.     AND.B    #$03,D2
  608.     BEQ.S    mt_vib_sine
  609.     LSL.B    #3,D0
  610.     CMP.B    #1,D2
  611.     BEQ.S    mt_vib_rampdown
  612.     MOVE.B    #255,D2
  613.     BRA.S    mt_vib_set
  614. mt_vib_rampdown
  615.     TST.B    n_vibratopos(A6)
  616.     BPL.S    mt_vib_rampdown2
  617.     MOVE.B    #255,D2
  618.     SUB.B    D0,D2
  619.     BRA.S    mt_vib_set
  620. mt_vib_rampdown2
  621.     MOVE.B    D0,D2
  622.     BRA.S    mt_vib_set
  623. mt_vib_sine
  624.     MOVE.B    0(A4,D0.W),D2
  625. mt_vib_set
  626.     MOVE.B    n_vibratocmd(A6),D0
  627.     AND.W    #15,D0
  628.     MULU    D0,D2
  629.     LSR.W    #7,D2
  630.     MOVE.W    n_period(A6),D0
  631.     TST.B    n_vibratopos(A6)
  632.     BMI.S    mt_VibratoNeg
  633.     ADD.W    D2,D0
  634.     BRA.S    mt_Vibrato3
  635. mt_VibratoNeg
  636.     SUB.W    D2,D0
  637. mt_Vibrato3
  638.     MOVE.W    D0,6(A5)
  639.     MOVE.B    n_vibratocmd(A6),D0
  640.     LSR.W    #2,D0
  641.     AND.W    #$003C,D0
  642.     ADD.B    D0,n_vibratopos(A6)
  643.     RTS
  644.  
  645. mt_TonePlusVolSlide
  646.     BSR    mt_TonePortNoChange
  647.     BRA    mt_VolumeSlide
  648.  
  649. mt_VibratoPlusVolSlide
  650.     BSR.S    mt_Vibrato2
  651.     BRA    mt_VolumeSlide
  652.  
  653. mt_Tremolo
  654.     MOVE.B    n_cmdlo(A6),D0
  655.     BEQ.S    mt_Tremolo2
  656.     MOVE.B    n_tremolocmd(A6),D2
  657.     AND.B    #$0F,D0
  658.     BEQ.S    mt_treskip
  659.     AND.B    #$F0,D2
  660.     OR.B    D0,D2
  661. mt_treskip
  662.     MOVE.B    n_cmdlo(A6),D0
  663.     AND.B    #$F0,D0
  664.     BEQ.S    mt_treskip2
  665.     AND.B    #$0F,D2
  666.     OR.B    D0,D2
  667. mt_treskip2
  668.     MOVE.B    D2,n_tremolocmd(A6)
  669. mt_Tremolo2
  670.     MOVE.B    n_tremolopos(A6),D0
  671.     LEA    mt_VibratoTable(PC),A4
  672.     LSR.W    #2,D0
  673.     AND.W    #$001F,D0
  674.     MOVEQ    #0,D2
  675.     MOVE.B    n_wavecontrol(A6),D2
  676.     LSR.B    #4,D2
  677.     AND.B    #$03,D2
  678.     BEQ.S    mt_tre_sine
  679.     LSL.B    #3,D0
  680.     CMP.B    #1,D2
  681.     BEQ.S    mt_tre_rampdown
  682.     MOVE.B    #255,D2
  683.     BRA.S    mt_tre_set
  684. mt_tre_rampdown
  685.     TST.B    n_vibratopos(A6)
  686.     BPL.S    mt_tre_rampdown2
  687.     MOVE.B    #255,D2
  688.     SUB.B    D0,D2
  689.     BRA.S    mt_tre_set
  690. mt_tre_rampdown2
  691.     MOVE.B    D0,D2
  692.     BRA.S    mt_tre_set
  693. mt_tre_sine
  694.     MOVE.B    0(A4,D0.W),D2
  695. mt_tre_set
  696.     MOVE.B    n_tremolocmd(A6),D0
  697.     AND.W    #15,D0
  698.     MULU    D0,D2
  699.     LSR.W    #6,D2
  700.     MOVEQ    #0,D0
  701.     MOVE.B    n_volume(A6),D0
  702.     TST.B    n_tremolopos(A6)
  703.     BMI.S    mt_TremoloNeg
  704.     ADD.W    D2,D0
  705.     BRA.S    mt_Tremolo3
  706. mt_TremoloNeg
  707.     SUB.W    D2,D0
  708. mt_Tremolo3
  709.     BPL.S    mt_TremoloSkip
  710.     CLR.W    D0
  711. mt_TremoloSkip
  712.     CMP.W    #$40,D0
  713.     BLS.S    mt_TremoloOk
  714.     MOVE.W    #$40,D0
  715. mt_TremoloOk
  716.     MOVE.W    D0,8(A5)
  717.     MOVE.B    n_tremolocmd(A6),D0
  718.     LSR.W    #2,D0
  719.     AND.W    #$003C,D0
  720.     ADD.B    D0,n_tremolopos(A6)
  721.     RTS
  722.  
  723. mt_SampleOffset
  724.     MOVEQ    #0,D0
  725.     MOVE.B    n_cmdlo(A6),D0
  726.     BEQ.S    mt_sononew
  727.     MOVE.B    D0,n_sampleoffset(A6)
  728. mt_sononew
  729.     MOVE.B    n_sampleoffset(A6),D0
  730.     LSL.W    #7,D0
  731.     CMP.W    n_length(A6),D0
  732.     BGE.S    mt_sofskip
  733.     SUB.W    D0,n_length(A6)
  734.     LSL.W    #1,D0
  735.     ADD.L    D0,n_start(A6)
  736.     RTS
  737. mt_sofskip
  738.     MOVE.W    #$0001,n_length(A6)
  739.     RTS
  740.  
  741. mt_VolumeSlide
  742.     MOVEQ    #0,D0
  743.     MOVE.B    n_cmdlo(A6),D0
  744.     LSR.B    #4,D0
  745.     TST.B    D0
  746.     BEQ.S    mt_VolSlideDown
  747. mt_VolSlideUp
  748.     ADD.B    D0,n_volume(A6)
  749.     CMP.B    #$40,n_volume(A6)
  750.     BMI.S    mt_vsuskip
  751.     MOVE.B    #$40,n_volume(A6)
  752. mt_vsuskip
  753.     MOVE.B    n_volume(A6),D0
  754.     MOVE.W    D0,8(A5)
  755.     RTS
  756.  
  757. mt_VolSlideDown
  758.     MOVEQ    #0,D0
  759.     MOVE.B    n_cmdlo(A6),D0
  760.     AND.B    #$0F,D0
  761. mt_VolSlideDown2
  762.     SUB.B    D0,n_volume(A6)
  763.     BPL.S    mt_vsdskip
  764.     CLR.B    n_volume(A6)
  765. mt_vsdskip
  766.     MOVE.B    n_volume(A6),D0
  767.     MOVE.W    D0,8(A5)
  768.     RTS
  769.  
  770. mt_PositionJump
  771.     MOVE.B    n_cmdlo(A6),D0
  772.     SUBQ.B    #1,D0
  773.     MOVE.B    D0,mt_SongPos
  774. mt_pj2    CLR.B    mt_PBreakPos
  775.     ST     mt_PosJumpFlag
  776.     RTS
  777.  
  778. mt_VolumeChange
  779.     MOVEQ    #0,D0
  780.     MOVE.B    n_cmdlo(A6),D0
  781.     CMP.B    #$40,D0
  782.     BLS.S    mt_VolumeOk
  783.     MOVEQ    #$40,D0
  784. mt_VolumeOk
  785.     MOVE.B    D0,n_volume(A6)
  786.     MOVE.W    D0,8(A5)
  787.     RTS
  788.  
  789. mt_PatternBreak
  790.     MOVEQ    #0,D0
  791.     MOVE.B    n_cmdlo(A6),D0
  792.     MOVE.L    D0,D2
  793.     LSR.B    #4,D0
  794.     MULU    #10,D0
  795.     AND.B    #$0F,D2
  796.     ADD.B    D2,D0
  797.     CMP.B    #63,D0
  798.     BHI.S    mt_pj2
  799.     MOVE.B    D0,mt_PBreakPos
  800.     ST    mt_PosJumpFlag
  801.     RTS
  802.  
  803. mt_SetSpeed
  804.     MOVE.B    3(A6),D0
  805.     BEQ    mt_Return2
  806.     CLR.B    mt_counter
  807.     MOVE.B    D0,mt_speed
  808.     RTS
  809.  
  810. mt_CheckMoreEfx
  811.     BSR    mt_UpdateFunk
  812.     MOVE.B    2(A6),D0
  813.     AND.B    #$0F,D0
  814.     CMP.B    #$9,D0
  815.     BEQ    mt_SampleOffset
  816.     CMP.B    #$B,D0
  817.     BEQ    mt_PositionJump
  818.     CMP.B    #$D,D0
  819.     BEQ.S    mt_PatternBreak
  820.     CMP.B    #$E,D0
  821.     BEQ.S    mt_E_Commands
  822.     CMP.B    #$F,D0
  823.     BEQ.S    mt_SetSpeed
  824.     CMP.B    #$C,D0
  825.     BEQ    mt_VolumeChange
  826.     BRA    mt_PerNop
  827.  
  828. mt_E_Commands
  829.     MOVE.B    n_cmdlo(A6),D0
  830.     AND.B    #$F0,D0
  831.     LSR.B    #4,D0
  832.     BEQ.S    mt_FilterOnOff
  833.     CMP.B    #1,D0
  834.     BEQ    mt_FinePortaUp
  835.     CMP.B    #2,D0
  836.     BEQ    mt_FinePortaDown
  837.     CMP.B    #3,D0
  838.     BEQ.S    mt_SetGlissControl
  839.     CMP.B    #4,D0
  840.     BEQ    mt_SetVibratoControl
  841.     CMP.B    #5,D0
  842.     BEQ    mt_SetFineTune
  843.     CMP.B    #6,D0
  844.     BEQ    mt_JumpLoop
  845.     CMP.B    #7,D0
  846.     BEQ    mt_SetTremoloControl
  847.     CMP.B    #9,D0
  848.     BEQ    mt_RetrigNote
  849.     CMP.B    #$A,D0
  850.     BEQ    mt_VolumeFineUp
  851.     CMP.B    #$B,D0
  852.     BEQ    mt_VolumeFineDown
  853.     CMP.B    #$C,D0
  854.     BEQ    mt_NoteCut
  855.     CMP.B    #$D,D0
  856.     BEQ    mt_NoteDelay
  857.     CMP.B    #$E,D0
  858.     BEQ    mt_PatternDelay
  859.     CMP.B    #$F,D0
  860.     BEQ    mt_FunkIt
  861.     RTS
  862.  
  863. mt_FilterOnOff
  864.     MOVE.B    n_cmdlo(A6),D0
  865.     AND.B    #1,D0
  866.     ASL.B    #1,D0
  867.     AND.B    #$FD,$BFE001
  868.     OR.B    D0,$BFE001
  869.     RTS    
  870.  
  871. mt_SetGlissControl
  872.     MOVE.B    n_cmdlo(A6),D0
  873.     AND.B    #$0F,D0
  874.     AND.B    #$F0,n_glissfunk(A6)
  875.     OR.B    D0,n_glissfunk(A6)
  876.     RTS
  877.  
  878. mt_SetVibratoControl
  879.     MOVE.B    n_cmdlo(A6),D0
  880.     AND.B    #$0F,D0
  881.     AND.B    #$F0,n_wavecontrol(A6)
  882.     OR.B    D0,n_wavecontrol(A6)
  883.     RTS
  884.  
  885. mt_SetFineTune
  886.     MOVE.B    n_cmdlo(A6),D0
  887.     AND.B    #$0F,D0
  888.     MOVE.B    D0,n_finetune(A6)
  889.     RTS
  890.  
  891. mt_JumpLoop
  892.     TST.B    mt_counter
  893.     BNE    mt_Return2
  894.     MOVE.B    n_cmdlo(A6),D0
  895.     AND.B    #$0F,D0
  896.     BEQ.S    mt_SetLoop
  897.     TST.B    n_loopcount(A6)
  898.     BEQ.S    mt_jumpcnt
  899.     SUBQ.B    #1,n_loopcount(A6)
  900.     BEQ    mt_Return2
  901. mt_jmploop    MOVE.B    n_pattpos(A6),mt_PBreakPos
  902.     ST    mt_PBreakFlag
  903.     RTS
  904.  
  905. mt_jumpcnt
  906.     MOVE.B    D0,n_loopcount(A6)
  907.     BRA.S    mt_jmploop
  908.  
  909. mt_SetLoop
  910.     MOVE.W    mt_PatternPos(PC),D0
  911.     LSR.W    #4,D0
  912.     MOVE.B    D0,n_pattpos(A6)
  913.     RTS
  914.  
  915. mt_SetTremoloControl
  916.     MOVE.B    n_cmdlo(A6),D0
  917.     AND.B    #$0F,D0
  918.     LSL.B    #4,D0
  919.     AND.B    #$0F,n_wavecontrol(A6)
  920.     OR.B    D0,n_wavecontrol(A6)
  921.     RTS
  922.  
  923. mt_RetrigNote
  924.     MOVE.L    D1,-(SP)
  925.     MOVEQ    #0,D0
  926.     MOVE.B    n_cmdlo(A6),D0
  927.     AND.B    #$0F,D0
  928.     BEQ.S    mt_rtnend
  929.     MOVEQ    #0,D1
  930.     MOVE.B    mt_counter(PC),D1
  931.     BNE.S    mt_rtnskp
  932.     MOVE.W    (A6),D1
  933.     AND.W    #$0FFF,D1
  934.     BNE.S    mt_rtnend
  935.     MOVEQ    #0,D1
  936.     MOVE.B    mt_counter(PC),D1
  937. mt_rtnskp
  938.     DIVU    D0,D1
  939.     SWAP    D1
  940.     TST.W    D1
  941.     BNE.S    mt_rtnend
  942. mt_DoRetrig
  943.     MOVE.W    n_dmabit(A6),$DFF096    ; Channel DMA off
  944.     MOVE.L    n_start(A6),(A5)    ; Set sampledata pointer
  945.     MOVE.W    n_length(A6),4(A5)    ; Set length
  946.     MOVE.W    #300,D0
  947. mt_rtnloop1
  948.     DBRA    D0,mt_rtnloop1
  949.     MOVE.W    n_dmabit(A6),D0
  950.     BSET    #15,D0
  951.     MOVE.W    D0,$DFF096
  952.     MOVE.W    #300,D0
  953. mt_rtnloop2
  954.     DBRA    D0,mt_rtnloop2
  955.     MOVE.L    n_loopstart(A6),(A5)
  956.     MOVE.L    n_replen(A6),4(A5)
  957. mt_rtnend
  958.     MOVE.L    (SP)+,D1
  959.     RTS
  960.  
  961. mt_VolumeFineUp
  962.     TST.B    mt_counter
  963.     BNE    mt_Return2
  964.     MOVEQ    #0,D0
  965.     MOVE.B    n_cmdlo(A6),D0
  966.     AND.B    #$F,D0
  967.     BRA    mt_VolSlideUp
  968.  
  969. mt_VolumeFineDown
  970.     TST.B    mt_counter
  971.     BNE    mt_Return2
  972.     MOVEQ    #0,D0
  973.     MOVE.B    n_cmdlo(A6),D0
  974.     AND.B    #$0F,D0
  975.     BRA    mt_VolSlideDown2
  976.  
  977. mt_NoteCut
  978.     MOVEQ    #0,D0
  979.     MOVE.B    n_cmdlo(A6),D0
  980.     AND.B    #$0F,D0
  981.     CMP.B    mt_counter(PC),D0
  982.     BNE    mt_Return2
  983.     CLR.B    n_volume(A6)
  984.     MOVE.W    #0,8(A5)
  985.     RTS
  986.  
  987. mt_NoteDelay
  988.     MOVEQ    #0,D0
  989.     MOVE.B    n_cmdlo(A6),D0
  990.     AND.B    #$0F,D0
  991.     CMP.B    mt_Counter,D0
  992.     BNE    mt_Return2
  993.     MOVE.W    (A6),D0
  994.     BEQ    mt_Return2
  995.     MOVE.L    D1,-(SP)
  996.     BRA    mt_DoRetrig
  997.  
  998. mt_PatternDelay
  999.     TST.B    mt_counter
  1000.     BNE    mt_Return2
  1001.     MOVEQ    #0,D0
  1002.     MOVE.B    n_cmdlo(A6),D0
  1003.     AND.B    #$0F,D0
  1004.     TST.B    mt_PattDelTime2
  1005.     BNE    mt_Return2
  1006.     ADDQ.B    #1,D0
  1007.     MOVE.B    D0,mt_PattDelTime
  1008.     RTS
  1009.  
  1010. mt_FunkIt
  1011.     TST.B    mt_counter
  1012.     BNE    mt_Return2
  1013.     MOVE.B    n_cmdlo(A6),D0
  1014.     AND.B    #$0F,D0
  1015.     LSL.B    #4,D0
  1016.     AND.B    #$0F,n_glissfunk(A6)
  1017.     OR.B    D0,n_glissfunk(A6)
  1018.     TST.B    D0
  1019.     BEQ    mt_Return2
  1020. mt_UpdateFunk
  1021.     MOVEM.L    A0/D1,-(SP)
  1022.     MOVEQ    #0,D0
  1023.     MOVE.B    n_glissfunk(A6),D0
  1024.     LSR.B    #4,D0
  1025.     BEQ.S    mt_funkend
  1026.     LEA    mt_FunkTable(PC),A0
  1027.     MOVE.B    (A0,D0.W),D0
  1028.     ADD.B    D0,n_funkoffset(A6)
  1029.     BTST    #7,n_funkoffset(A6)
  1030.     BEQ.S    mt_funkend
  1031.     CLR.B    n_funkoffset(A6)
  1032.  
  1033.     MOVE.L    n_loopstart(A6),D0
  1034.     MOVEQ    #0,D1
  1035.     MOVE.W    n_replen(A6),D1
  1036.     ADD.L    D1,D0
  1037.     ADD.L    D1,D0
  1038.     MOVE.L    n_wavestart(A6),A0
  1039.     ADDQ.L    #1,A0
  1040.     CMP.L    D0,A0
  1041.     BLO.S    mt_funkok
  1042.     MOVE.L    n_loopstart(A6),A0
  1043. mt_funkok
  1044.     MOVE.L    A0,n_wavestart(A6)
  1045.     MOVEQ    #-1,D0
  1046.     SUB.B    (A0),D0
  1047.     MOVE.B    D0,(A0)
  1048. mt_funkend
  1049.     MOVEM.L    (SP)+,A0/D1
  1050.     RTS
  1051.  
  1052.  
  1053. mt_FunkTable dc.b 0,5,6,7,8,10,11,13,16,19,22,26,32,43,64,128
  1054.  
  1055. mt_VibratoTable    
  1056.     dc.b   0, 24, 49, 74, 97,120,141,161
  1057.     dc.b 180,197,212,224,235,244,250,253
  1058.     dc.b 255,253,250,244,235,224,212,197
  1059.     dc.b 180,161,141,120, 97, 74, 49, 24
  1060.  
  1061. mt_PeriodTable
  1062. ; Tuning 0, Normal
  1063.     dc.w    856,808,762,720,678,640,604,570,538,508,480,453
  1064.     dc.w    428,404,381,360,339,320,302,285,269,254,240,226
  1065.     dc.w    214,202,190,180,170,160,151,143,135,127,120,113
  1066. ; Tuning 1
  1067.     dc.w    850,802,757,715,674,637,601,567,535,505,477,450
  1068.     dc.w    425,401,379,357,337,318,300,284,268,253,239,225
  1069.     dc.w    213,201,189,179,169,159,150,142,134,126,119,113
  1070. ; Tuning 2
  1071.     dc.w    844,796,752,709,670,632,597,563,532,502,474,447
  1072.     dc.w    422,398,376,355,335,316,298,282,266,251,237,224
  1073.     dc.w    211,199,188,177,167,158,149,141,133,125,118,112
  1074. ; Tuning 3
  1075.     dc.w    838,791,746,704,665,628,592,559,528,498,470,444
  1076.     dc.w    419,395,373,352,332,314,296,280,264,249,235,222
  1077.     dc.w    209,198,187,176,166,157,148,140,132,125,118,111
  1078. ; Tuning 4
  1079.     dc.w    832,785,741,699,660,623,588,555,524,495,467,441
  1080.     dc.w    416,392,370,350,330,312,294,278,262,247,233,220
  1081.     dc.w    208,196,185,175,165,156,147,139,131,124,117,110
  1082. ; Tuning 5
  1083.     dc.w    826,779,736,694,655,619,584,551,520,491,463,437
  1084.     dc.w    413,390,368,347,328,309,292,276,260,245,232,219
  1085.     dc.w    206,195,184,174,164,155,146,138,130,123,116,109
  1086. ; Tuning 6
  1087.     dc.w    820,774,730,689,651,614,580,547,516,487,460,434
  1088.     dc.w    410,387,365,345,325,307,290,274,258,244,230,217
  1089.     dc.w    205,193,183,172,163,154,145,137,129,122,115,109
  1090. ; Tuning 7
  1091.     dc.w    814,768,725,684,646,610,575,543,513,484,457,431
  1092.     dc.w    407,384,363,342,323,305,288,272,256,242,228,216
  1093.     dc.w    204,192,181,171,161,152,144,136,128,121,114,108
  1094. ; Tuning -8
  1095.     dc.w    907,856,808,762,720,678,640,604,570,538,508,480
  1096.     dc.w    453,428,404,381,360,339,320,302,285,269,254,240
  1097.     dc.w    226,214,202,190,180,170,160,151,143,135,127,120
  1098. ; Tuning -7
  1099.     dc.w    900,850,802,757,715,675,636,601,567,535,505,477
  1100.     dc.w    450,425,401,379,357,337,318,300,284,268,253,238
  1101.     dc.w    225,212,200,189,179,169,159,150,142,134,126,119
  1102. ; Tuning -6
  1103.     dc.w    894,844,796,752,709,670,632,597,563,532,502,474
  1104.     dc.w    447,422,398,376,355,335,316,298,282,266,251,237
  1105.     dc.w    223,211,199,188,177,167,158,149,141,133,125,118
  1106. ; Tuning -5
  1107.     dc.w    887,838,791,746,704,665,628,592,559,528,498,470
  1108.     dc.w    444,419,395,373,352,332,314,296,280,264,249,235
  1109.     dc.w    222,209,198,187,176,166,157,148,140,132,125,118
  1110. ; Tuning -4
  1111.     dc.w    881,832,785,741,699,660,623,588,555,524,494,467
  1112.     dc.w    441,416,392,370,350,330,312,294,278,262,247,233
  1113.     dc.w    220,208,196,185,175,165,156,147,139,131,123,117
  1114. ; Tuning -3
  1115.     dc.w    875,826,779,736,694,655,619,584,551,520,491,463
  1116.     dc.w    437,413,390,368,347,328,309,292,276,260,245,232
  1117.     dc.w    219,206,195,184,174,164,155,146,138,130,123,116
  1118. ; Tuning -2
  1119.     dc.w    868,820,774,730,689,651,614,580,547,516,487,460
  1120.     dc.w    434,410,387,365,345,325,307,290,274,258,244,230
  1121.     dc.w    217,205,193,183,172,163,154,145,137,129,122,115
  1122. ; Tuning -1
  1123.     dc.w    862,814,768,725,684,646,610,575,543,513,484,457
  1124.     dc.w    431,407,384,363,342,323,305,288,272,256,242,228
  1125.     dc.w    216,203,192,181,171,161,152,144,136,128,121,114
  1126.  
  1127. mt_chan1temp    dc.l    0,0,0,0,0,$00010000,0,  0,0,0,0
  1128. mt_chan2temp    dc.l    0,0,0,0,0,$00020000,0,  0,0,0,0
  1129. mt_chan3temp    dc.l    0,0,0,0,0,$00040000,0,  0,0,0,0
  1130. mt_chan4temp    dc.l    0,0,0,0,0,$00080000,0,  0,0,0,0
  1131.  
  1132. mt_SampleStarts    dc.l    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  1133.         dc.l    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  1134.  
  1135. mt_SongDataPtr    dc.l 0
  1136.  
  1137. mt_speed    dc.b 6
  1138. mt_counter    dc.b 0
  1139. mt_SongPos    dc.b 0
  1140. mt_PBreakPos    dc.b 0
  1141. mt_PosJumpFlag    dc.b 0
  1142. mt_PBreakFlag    dc.b 0
  1143. mt_LowMask    dc.b 0
  1144. mt_PattDelTime    dc.b 0
  1145. mt_PattDelTime2    dc.b 0,0
  1146.  
  1147. mt_PatternPos    dc.w 0
  1148. mt_DMACONtemp    dc.w 0
  1149.  
  1150. Equalizer1:    dc.w 0
  1151. Equalizer2:    dc.w 0
  1152. Equalizer3:    dc.w 0
  1153. Equalizer4:    dc.w 0
  1154.  
  1155. ;/* End of File */
  1156.